home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’93 / sort / Source / shell.c < prev    next >
C/C++ Source or Header  |  1993-06-17  |  815b  |  39 lines

  1. #ifndef THINK_C
  2.     #include <Types.h>
  3. #endif
  4.  
  5. #include "sortdata.h"
  6. void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag);
  7.  
  8. void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag)
  9. {
  10.     long gap, index, select, *pindex, *pselect;
  11.     Boolean swaped;
  12.     gap = maxdata >> 1;
  13.     while (gap > 0) {
  14.         do {
  15.             swaped = false;
  16.             pindex = sortdata;
  17.             select = gap;
  18.             pselect = &sortdata[gap];
  19.             for (index = 0; index < maxdata - gap; index++, pindex++, select++, pselect++) {
  20.  
  21.                 if (*stopflag) {
  22.                     return;
  23.                 }
  24.  
  25.                 if ((*cm)(index, select, *pindex, *pselect) > 0) {
  26.                     (*sw)(index, select, pindex, pselect);
  27.                     swaped = true;
  28.                 }
  29.             }
  30.             index = select - 1;
  31.             pindex = pselect -1;
  32.             select = index - gap;
  33.             pselect = &sortdata[select];
  34.             
  35.         } while (swaped);
  36.          gap >>= 1;
  37.     }
  38. }
  39.